package com.junxian.springboot03.juc.threadPool.single;

/**
 * 静态内部类单例模式
 * 一种优秀的单例模式，开源项目中常用的单例模式
 * 这相对于恶汉单例模式，在JVM加载外部类的时候，不会加载静态内部类，只有内部类的属性和方法被调用时才会被加载，不使用的话就不会创建
 */
public class StaticInnerClassSingle {

    private StaticInnerClassSingle(){

    }

    //单例持有者（内部类）
    private static class InvokerClass{
        private static  final  StaticInnerClassSingle staticInnerClassSingle = new StaticInnerClassSingle() ;
    }

    public static StaticInnerClassSingle getInstance(){
        //调用内部类的属性创建单例
        return InvokerClass.staticInnerClassSingle;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 20; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "--" + getInstance());
            }).start();
        }
    }
}
